package com.tiancheng.onecode.trade.model.request.order;


import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.Valid;
import lombok.Data;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @ClassName CreateOrderBase
 * @Description 创建订单基础参数
 * @Author kellen
 * @Date 2024/11/24 11:03
 */
@Data
public class OpenCreateOrderBaseVO implements Serializable {

    /**
     * 主订单号
     */
    @NotEmpty(message = "主订单号不允许为空！")
    private String orderId;
    /**
     * 源订单号（续单、尾款单）
     */
    private String originalOrderId;
    /**
     * 用户id
     */
    @NotEmpty(message = "用户id不允许为空！")
    private String uid;
    /**
     * 用户手机号
     */
    private String mobile;
    /**
     * 订单来源
     */
    @NotEmpty(message = "订单来源不允许为空！")
    private String orderSource;
    /**
     * 订单名称
     * 如果不传，从子订单取第一个
     */
    private String orderName;
    /**
     * 交易信息
     * 扩展信息，查询时原样返回
     */
    private String tradeInfo;
    /**
     * 下单时间
     * yyyy-MM-dd HH:mm:ss
     */
    @NotNull(message = "下单时间不允许为空！")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * 支付超时时间, 不传默认30分钟后过期
     * yyyy-MM-dd HH:mm:ss
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime payExpiryTime;
    /**
     * 小程序id
     */
    private String appId;
    /**
     * 来源ip
     */
    private String ip;
    /**
     * 是否测试订单
     * 0-否，1-测试单
     */
    private Boolean isTest;
    /**
     * 订单类型
     * @see com.tiancheng.trade.order.enums.OrderTypeEnum
      */
    @NotEmpty(message = "订单类型不允许为空！")
    private String orderType;
    /**
     * 下单场景
     * @see com.tiancheng.trade.order.enums.OrderSceneEnum
     */
    @NotEmpty(message = "下单场景不允许为空！")
    private String orderScene;
    // 主商户编号
    private String merchantCode;
    // 主商户名称
    private String merchantName;
    /**
     * 微信小程序、公众号用户标识
     */
    private String openid;
    // 推广码
    private String generalizeCode;

    // 主订单优惠券信息
    @Valid
    private List<OpenCreateCoupons> coupons;
    // 用户会员信息
    /*@Valid
    private VipVO vipInfo;*/
    // 子订单信息
    @Valid
    @NotEmpty
    private List<OpenCreateSubOrderVO> subOrders;
    // 结算信息
    private String settlementInfo;
    /**
     * 微信营销优惠信息
     */
    private String goodsTag;

    // 设备类型
    private String appType;
    // app版本信息
    private String appVersion;

    /**
     * 系统来源
     * @see com.cloud.trade.order.enums.SystemSourceEnum
     */
    private String systemSource;
    /**
     * 业务类型
     * @see com.cloud.trade.order.enums.BusinessTypeEnum
     */
    private String businessType;

    /**
     * 订单业务类型 ： 传入 overseas 走英文版订单流程，当前为paypal支付
     * */
    private String orderBusiness;
    /**
     * 订单批次号
     */
    private String batchId;
    /**
     * 订单消息通知地址
     */
    @NotEmpty(message = "订单消息通知地址不允许为空")
    private String notifyUrl;
}
